package com.zhanlv.socketnet

import android.os.Build
import android.util.Base64
import android.util.Log
import org.json.JSONObject
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
import java.net.ServerSocket
import java.net.Socket
import java.nio.charset.StandardCharsets

object SocketServer {

    private val TAG = SocketServer::class.java.simpleName

    private const val SOCKET_PORT = 6667

    private var socket: Socket? = null
    private var serverSocket: ServerSocket? = null

    private lateinit var mCallback: ServerCallback

    private lateinit var outputStream: OutputStream

    var result = true
    /**
     * 开启服务
     */
    fun startServer(callback: ServerCallback): Boolean {
        Log.i(TAG, "startServer: ")
        mCallback = callback
        Thread {
            try {
                serverSocket = ServerSocket(SOCKET_PORT)
                while (result) {
                    socket = serverSocket?.accept()
                    mCallback.otherMsg("${socket?.inetAddress} to connected")
                    ServerThread(socket!!, mCallback).start()
                }
            } catch (e: IOException) {
                e.printStackTrace()
                result = false
            }
        }.start()
        return result
    }

    /**
     * 关闭服务
     */
    fun stopServer() {
        Log.i(TAG, "stopServer: ")
        socket?.apply {
            shutdownInput()
            shutdownOutput()
            close()
        }
        serverSocket?.close()
    }

    fun sendToClientV2(msg: String){
        outputStream = socket!!.getOutputStream()
        try {
            outputStream.write(msg.toByteArray())
            outputStream.flush()
            mCallback.otherMsg("toClient: $msg")
            Log.d(TAG, "发送到客户端成功")
        } catch (e: IOException) {
            e.printStackTrace()
            Log.e(TAG, "向客户端发送消息失败")
        }
    }

    /**
     * 发送到客户端
     */
    fun sendToClient(msg: String) {
        Thread {
            if (socket!!.isClosed) {
                Log.e(TAG, "sendToClient: Socket is closed")
                return@Thread
            }
            outputStream = socket!!.getOutputStream()
            try {
                outputStream.write(msg.toByteArray())
                outputStream.flush()
                mCallback.otherMsg("toClient: $msg")
                Log.d(TAG, "发送到客户端成功")
            } catch (e: IOException) {
                e.printStackTrace()
                Log.e(TAG, "向客户端发送消息失败")
            }
        }.start()
    }

    class ServerThread(private val socket: Socket, private val callback: ServerCallback) :
        Thread() {

        override fun run() {
            val inputStream: InputStream?
            try {
                inputStream = socket.getInputStream()
                val buffer = ByteArray(1024)
                var len: Int
                var receiveStr = ""
                if (inputStream.available() == 0) {
                    Log.e(TAG, "inputStream.available() == 0")
                }
                while (inputStream.read(buffer).also { len = it } != -1) {
                    receiveStr += String(buffer, 0, len, Charsets.UTF_8)
                    if (len < 1024) {
                        //Thread.sleep(10000)
                        //sendToClient("8769")

                        callback.receiveClientMsg(true, receiveStr)


                        if (receiveStr.contains("androidId")){
                            Log.e(TAG, "android id")

                            sendToClient("8769")
                        }else{
                            Log.e(TAG, "no android id")

                            var json = "{\"code\": 1,\"info\": \"转换成功\",\"data\": {\"strVisemeId\": \"0 16 6 6 19 19 6 2 19 0 19 7 8 8 15 2 8 12 2 8 0 \",\"language\": \"zh-cn\",\"text\": \"今天多少号\",\"buffer\": \"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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//t0xHoDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\",\"strAudioOffset\": \"50 99 155 210 272 359 396 433 557 668 681 705 730 780 854 928 1015 1064 1176 1262 1386 \"}}"
                            var jsonObj = JSONObject(json).optJSONObject("data")
                            Log.e(TAG, "hello " + jsonObj.optString("text"))

                            var visemeId = jsonObj.optString("strVisemeId")
                            var timestamp = jsonObj.optString("strAudioOffset")

                            var text = jsonObj.optString("text")
                            var language = jsonObj.optString("language")

                            var lab = language + "\n" + text + "\n" + visemeId + "\n" + timestamp

                            var buffer = jsonObj.optString("buffer")

                            var bufferDecode: ByteArray
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                                bufferDecode = java.util.Base64.getDecoder().decode(buffer)

                                var scoreLength = String.format("%09d", "2024".length)
                                var labLength = String.format("%09d", StandardCharsets.UTF_8.encode(lab).limit()) //StandardCharsets.UTF_8.encode(lab).limit()
                                var audioLength = String.format("%010d", bufferDecode.size)
                                var result = scoreLength + "\n" + labLength + "\n" + audioLength

                                Thread(Runnable {
                                    sendToClientV2(result)
                                    sendToClientV2("2024")
                                    sendToClientV2(lab)

                                    outputStream = SocketServer.socket!!.getOutputStream()
                                    try {
                                        outputStream.write(bufferDecode)
                                        outputStream.flush()
                                        Log.d(TAG, "发送到客户端成功")
                                    } catch (e: IOException) {
                                        e.printStackTrace()
                                        Log.e(TAG, "向客户端发送消息失败")
                                    }

                                }).start()

                            } else {

                            }
                        }

                        //wooran
                        //sendToClient("转化好的visemid timestamp")

                        receiveStr = ""
                    }
                }


            } catch (e: IOException) {
                e.printStackTrace()
                e.message?.let { Log.e("socket error", it) }
                callback.receiveClientMsg(false, "")
            }
        }
    }

    interface ServerCallback {
        //接收客户端的消息
        fun receiveClientMsg(success: Boolean, msg: String)
        //其他消息，例如有客户端连接和发送消息成功等
        fun otherMsg(msg: String)
    }

}